package com.ftg.learn.chapter8.home01;

import lombok.Data;

/**
 * cow
 * 英雄
 * 定义一个游戏中Hero 英雄的类，在该类中定义英雄的名字， 生命值和等级 3 个属性，
 * * 定义一个构造函数完成对生命值和等级的初始化，分别赋初值为100，1。同时实现名字的输入和英雄信息的输出。
 * * <p>
 * * （2）在上一题的基础上，为英雄再定义拥有一个参数的构造方法，传入一个英雄类型的值，
 * * 如果为1，则为普通英雄，生命值为100，如果该值为2，则为高级英雄，生命值初始化为200。
 * * <p>
 * * （3）在上两英雄类型的基础上，为英雄添加一个基本战斗的方法，
 * * 该方法拥有一个英雄类型的参数，当传入另一个英雄时，能降低对方100 点血。 再增加一个绝招的重载方法，
 * * 加入一个战斗类型参数，通过输入不同绝招参数，降低对方不同的血量。
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/7/24 下午3:42
 */
@Data
public class Hero {

    private String name;

    private int hp;

    private int level;


    public Hero(String name) {
        this.setName(name);
        this.setHp(100);
        this.setLevel(1);
        this.info();
    }

    public Hero(String name,int h) {
        this.setName(name);
        this.setHp(h == 1? 100 : 200);
        this.setLevel(1);
        this.info();
    }

    public Hero(String name,HeroType ht) {
        this.setName(name);
        switch (ht){
            case 普通英雄:
                this.setHp(100);
                break;
            case 高级英雄:
                this.setHp(200);
                break;
            default:
                this.setHp(300);
        }
        this.setLevel(1);
        this.info();
    }

    public Hero(String name,HeroTypeNew ht) {
        this.setName(name);
        switch (ht){
            case type1:
                this.setHp(100);
                break;
            case type2:
                this.setHp(200);
                break;
            default:
                this.setHp(300);
        }
        this.setLevel(1);
        this.info();
    }

    /**
     * 英雄的信息
     */
    public void info() {
        System.out.printf("英雄%s,等级%d,血量%d", this.getName(), this.getLevel(), this.getHp());
    }


}
